package com.hollysys.usersync.service;

import com.hollysys.usersync.entity.SyncResult;
import com.hollysys.usersync.entity.platform.Organization;
import org.springframework.lang.Nullable;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * 组织信息同步服务
 * 
 * @author Jeremy Yim
 */
public interface SyncOrgService {

    /**
     * 获得组织信息字典
     *
     * @param key    字典键
     * @param value  字典值
     * @param filter 过滤条件
     * @return 组织信息字典
     */
    <R, V> Map<R, V> getOrgMap(@NotNull Function<Organization, R> key, @NotNull Function<Organization, V> value,
                               @Nullable Predicate<Organization> filter);

    /**
     * 新增组织
     *
     * @param orgList 组织实体列表
     * @return 操作结果
     */
    List<SyncResult> addOrganization(List<Organization> orgList);

    /**
     * 修改组织信息
     *
     * @param orgList 组织机构实体列表
     * @return 操作结果
     */
    List<SyncResult> updateOrganization(List<Organization> orgList);

    /**
     * 删除指定组织信息
     *
     * @param orgList 组织机构实体列表
     * @return 操作结果
     */
    List<SyncResult> deleteOrganization(List<Organization> orgList);

    /**
     * 将组织code转换为id
     *
     * @param codeList 岗位code列表
     * @return 组织code - ID字典
     */
    Map<String, String> convertOrgCode2Id(List<String> codeList);

}
